package com.shujia.day19.mysql.pool;

import java.sql.SQLException;
import java.util.Timer;
import java.util.TimerTask;

public class MysqlTimerCheck {
    // TODO 用于定期检查MySQL连接
    //   当线程池被创建时，该检查的对象也需要被创建 => 当该对象被创建后，就可以进行检查操作
    //     检查操作需要定期指定，需要有一个额外的线程进行操作
    //      Timer
    MySqlConnectionPool connectionPool;

    public MysqlTimerCheck(MySqlConnectionPool connectionPool) {
        this.connectionPool = connectionPool;
        new Timer().schedule(new Check(connectionPool),connectionPool.mysqlPoolConfig.delay_time,connectionPool.mysqlPoolConfig.interval_time);
    }

    static class Check extends TimerTask {
        MySqlConnectionPool connectionPool;

        public Check(MySqlConnectionPool connectionPool) {
            this.connectionPool = connectionPool;
        }

        @Override
        public void run() {
            // 当检查任务开始后，连接池中连接不能变更
            synchronized (connectionPool) {
                System.out.println("开始启动检查任务...");
                // 对于Mysql连接对象，需要记录上一次使用完成的时间
                for (MysqlConnection mysqlConnection : connectionPool.notUseCon) {
                    long sjc = System.currentTimeMillis() - mysqlConnection.flagTime;
                    System.out.println(DateParseUtil.parseTime(mysqlConnection.flagTime)+"当前时间差"+sjc);
                    if ( sjc >= connectionPool.mysqlPoolConfig.kill_time) {
                        System.out.println("发现有空闲的连接...");
                        mysqlConnection.close();
                        connectionPool.notUseCon.remove(mysqlConnection);
                    }
                }
                System.out.println("检查任务结束...");
            }
        }
    }

}
